package com.blankland.dataanalysis.utls;

import com.blankland.dataanalysis.domain.Menu;
import com.blankland.dataanalysis.domain.vo.MetaVo;
import com.blankland.dataanalysis.domain.vo.RouterVo;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;

/**
 *  根据树形菜单结构，构建对应路由的工具类

 转成
 {
 path: '/system',    //路径
 component: Layout,  //布局方式：Layout表示折叠布局
 name: 'System',     //名称
 meta: { title: '系统管理', icon: 'el-icon-s-help' },//标题和图标
 children: [         //子路由
 {
 path: 'sysRole',
 name: 'SysRole',
 component: () => import('@/views/system/sysRole/index'),//角色管理页面
 meta: { title: '角色管理', icon: 'el-icon-s-custom' }
 },
 {
 path: 'sysUser',
 name: 'SysUser',
 component: () => import('@/views/system/sysUser/index'),
 meta: { title: '用户管理', icon: 'el-icon-user-solid' }
 },
 {
 path: 'sysMeun',
 name: 'SysMenu',
 component: () => import('@/views/system/sysMenu/index'),
 meta: { title: '菜单管理', icon: 'el-icon-s-unfold' }
 },
 // 给角色分配菜单对应的路由
 {
 path: 'assignAuth',
 component: () => import('@/views/system/sysRole/assignAuth'),
 meta: {
 activeMenu: '/system/sysRole',
 title: '角色授权'
 },
 hidden: true, //隐藏路由，不用显示，只实现页面跳转
 }
 ]
 },




 */
public class RouterHelperUtils {

    /**
     * 根据树形结构菜单构建路由
     * @param menus 树形结构菜单
     * @return 对应的路由信息
     */
    public static List<RouterVo> buildRouters(List<Menu> menus) {
        //1、封装返回的路由集合
        List<RouterVo> routers = new LinkedList<RouterVo>();
        //2、遍历树形结构菜单
        for (Menu menu : menus) {
            RouterVo router = new RouterVo();
            //3、封装数据
            router.setHidden(false);
            router.setAlwaysShow(false);
            router.setPath(getRouterPath(menu));
            router.setComponent(menu.getComponent());
            router.setMeta(new MetaVo(menu.getName(), menu.getIcon()));
            List<Menu> children = menu.getChildren();
            //4、如果当前是菜单，需将按钮对应的路由加载出来，如：“角色授权”按钮对应的路由在“系统管理”下面
            if(menu.getType().intValue() == 1) {
                List<Menu> hiddenMenuList = children.stream().filter(item -> !StringUtils.isEmpty(item.getComponent())).collect(Collectors.toList());
//                System.out.println("--------------------------");
//                System.out.println(hiddenMenuList);
//                System.out.println("--------------------------");


                for (Menu hiddenMenu : hiddenMenuList) {
                    RouterVo hiddenRouter = new RouterVo();
                    hiddenRouter.setHidden(true);
                    hiddenRouter.setAlwaysShow(false);
                    hiddenRouter.setPath(getRouterPath(hiddenMenu));
                    hiddenRouter.setComponent(hiddenMenu.getComponent());
                    hiddenRouter.setMeta(new MetaVo(hiddenMenu.getName(), hiddenMenu.getIcon()));
                    routers.add(hiddenRouter);
                }
            } else {
                if (!CollectionUtils.isEmpty(children)) {
                    if(children.size() > 0) {
                        router.setAlwaysShow(true);
                    }
                    router.setChildren(buildRouters(children));
                }
            }
            routers.add(router);
        }
        return routers;
    }

    /**
     * 获取路由地址
     *
     * @param menu 菜单信息
     * @return 路由地址
     */
    public static String getRouterPath(Menu menu) {
        String routerPath = "/" + menu.getPath();
        if(menu.getParentId().intValue() != 0) {
            routerPath = menu.getPath();
        }
        return routerPath;
    }
}
